<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="util.*"%>
<%@page import="entidades.*"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="java.util.Date"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.LinkedList"%>
<%@page import="java.text.SimpleDateFormat"%>

<html>
<head>

<%@ include file="jspf/head.jspf" %>

<script type="text/javascript">
	jQuery(document).ready(function()
		{
		jQuery("#form_filtros input.fecha").datepicker( {showAnim: "slideDown", dateFormat: "dd/mm/yy"} );

		jQuery("#form_filtros input[name='f-fecha1']").change( function()
			{changeCampoFecha("#form_filtros input[name='f-fecha1']", "#form_filtros input[name='f-fecha2']", 1);});
		jQuery("#form_filtros input[name='f-fecha2']").change( function()
			{changeCampoFecha("#form_filtros input[name='f-fecha1']", "#form_filtros input[name='f-fecha2']", 2);});
		});
</script>

<%
Date fecha1 = Util.parseDate(request.getParameter("f-fecha1"));
Date fecha2 = Util.parseDate(request.getParameter("f-fecha2"));
try{
	if(fecha1 == null) fecha1 = new Date();
	if(fecha2 == null) fecha2 = new Date(fecha1.getTime() + (long)69*86400000);
	}catch(Exception e) {}

List<Newlong> newlongs = Newlong.listar();

String colorVacio = "#E0E0E0";
String[] colores = {"#FF0000",
					"#FF6A00",
					"#FFD800",
					"#B6FF00",
					"#4CFF00",
					"#00FF21",
					"#00FF90",
					"#00FFFF",
					"#0094FF",
					"#0026FF",
					"#4800FF",
					"#B200FF",
					"#FF00DC",
					"#FF006E",
					"#7F0000",
					"#7F3300",
					"#7F6A00",
					"#5B7F00",
					"#5B7F00",
					"#007F0E",
					"#007F46",
					"#007F7F",
					"#004A7F",
					"#00137F",
					"#21007F",
					"#57007F",
					"#7F006E",
					"#7F0037"};
%>

</head>
<body>

<%@ include file="jspf/header.jspf" %>

<br/>

<h1>Gráficos de carga de trabajo</h1>

<br/>

<!-- Tabla de filtros -->
<form action="" method="get" id="form_filtros">
	<input type="hidden" name="accion" value="filtro"/>

	<center><table class="filtros">
		<tr>
			<td>Seleccione el rango:</td>
			<td>
				<input type="text" name="f-fecha1" class="fecha" size="11" value="<%= Util.format(fecha1, "dd/MM/yyyy") %>"/>
				a
				<input type="text" name="f-fecha2" class="fecha" size="11" value="<%= Util.format(fecha2, "dd/MM/yyyy") %>"/>
			</td>
			<td><button name="buscar"><img src="icon/find.png" alt="" title="Buscar"/> <span>Buscar</span></button></td>
		</tr>
	</table></center>
</form>

<!-- Tablas -->
<%{
// Un dia (86.400.000 milisegundos) son 20 pixeles.
double pixelesXmilisegundos = 20.0 / 86400000.0;

// Itero sobre todas las newlongs.
for(int n=0; n<newlongs.size(); n++)
	{
	// Defino los colores de cada formato y creo las variables para obtener el porcentaje de cada formato.
	long cantidadAsignadaTotal = 0;
	List<FormatosPorNewlong> formatos = FormatosPorNewlong.listar(newlongs.get(n).getId());
	Map<Integer, Float> porcentajeXformatos = new HashMap();
	Map<Integer, String> colorXformato = new HashMap();

	for(int f=0; f<formatos.size(); f++)
		{ colorXformato.put(formatos.get(f).getFormatoId(), colores[f]); }

	// Calculo la longitud de las barras ocupadas y vacias de los diferentes ciclos de la newlong.
	CicloNewlong ciclo = CicloNewlong.getCicloNewLongByFecha(fecha1);
        List<CicloNewlong> ciclos = CicloNewlong.listar(newlongs.get(n).getId(), ciclo.getFechaHoraInicio(), fecha2);
	long ciclos_anchoColumna[] = new long[ciclos.size()];
	String ciclos_codigoHtml[] = new String[ciclos.size()];
	String ciclos_codigoHtmlProps[] = new String[ciclos.size()];


	for(int c=0; c<ciclos.size(); c++)
		{
		// Obtengo la cantidad de bolsas (ocupadas y vacias) de cada formato.
		long milisegundosCiclo = ciclos.get(c).getFechaHoraFin().getTime() - ciclos.get(c).getFechaHoraInicio().getTime();
		long capacidadCiclo = ciclos.get(c).getCapacidad();

		if(milisegundosCiclo > 0)
			{
			if (ciclos.get(c).getCantidadDisponible() >= 0){
                            ciclos_anchoColumna[c] = (long) (milisegundosCiclo * pixelesXmilisegundos );
                        }else{
                            ciclos_anchoColumna[c] = (long) (milisegundosCiclo * pixelesXmilisegundos ) + 20l;
                        }
			if(capacidadCiclo > 0)
				{
				ciclos_codigoHtml[c] = "";
				ciclos_codigoHtmlProps[c] = "";
				double pixelesXbolsa = pixelesXmilisegundos * milisegundosCiclo / capacidadCiclo;

				List<EtapaNewlong> etapas = EtapaNewlong.listar(ciclos.get(c).getId());

				for(int e=0; e<etapas.size(); e++)
					{
					// Operaciones para obtener la longitud de las barras ocupadas y vacias.
					//if(etapas.get(e).getCantidad() > 0)
					//	{
						long etapaOcupado = etapas.get(e).getOcupado();
						long etapaLibre = etapas.get(e).getDisponible();
                                                long etapaTerico = 0;
                                                try{
                                                    Double proporcion = Double.parseDouble(FormatosPorNewlong.getFormatoNewlong(ciclos.get(c).getNewlong().getId(), etapas.get(e).getFormatoId()).getProporcion());
                                                    etapaTerico = (long)(proporcion * ciclos.get(c).getCapacidad()/100);
                                                }catch (Exception excep){};
						String color = colorXformato.get(etapas.get(e).getFormatoId());
						ciclos_codigoHtml[c] += "<div style=\"float:left; height:10px; width:"+ (long)(pixelesXbolsa * etapaOcupado) +"px; background-color:" + color +"\"></div>";
						ciclos_codigoHtml[c] += "<div style=\"float:left; height:10px; width:"+ (long)(pixelesXbolsa * etapaLibre) +"px; background-color:" + colorVacio +"\"></div>";
						ciclos_codigoHtmlProps[c] += "<div style=\"float:left; height:10px; width:"+ (long)(pixelesXbolsa * etapaTerico) +"px; background-color:" + color +"\"></div>";


						// Agrego los datos de esta etapa a las estadisticas.
						Float f = porcentajeXformatos.get(etapas.get(e).getFormatoId());
						f = (f == null)? etapaOcupado : etapaOcupado + f;
                                                Float prOutput = 0f;
                                                try{
                                                   prOutput = Float.parseFloat(FormatosPorNewlong.getFormatoNewlong(ciclos.get(c).getNewlong().getId(), etapas.get(e).getFormatoId()).getProporcion());
                                                }catch (Exception e2){};
						porcentajeXformatos.put(etapas.get(e).getFormatoId(), prOutput );
						cantidadAsignadaTotal += etapaOcupado;
						//}
					}
				}
			else
				{
				// El ciclo tiene una capacidad de 0 (aunque la fecha de inicio no es igual a la fecha de fin).
				ciclos_codigoHtml[c] = "<div style=\"float:left; height:10px; width:"+ ciclos_anchoColumna[c] +"px; background-color:" + colorVacio +"\"></div>";
				ciclos_codigoHtmlProps[c] = "<div style=\"float:left; height:10px; width:"+ ciclos_anchoColumna[c] +"px; background-color:" + colorVacio +"\"></div>";
				}
			}
		else
			{
			// La fecha de inicio del ciclo es igual a la fecha de fin.
			ciclos_anchoColumna[c] = 0;
			ciclos_codigoHtml[c] = "";
			ciclos_codigoHtmlProps[c] = "";
			}
		}



	// Calculo los porcentajes de la newlong.
	Iterator<Integer> iter = porcentajeXformatos.keySet().iterator();
	while(iter.hasNext())
		{
		int id = iter.next();
		float pr = porcentajeXformatos.get(id);
		porcentajeXformatos.put(id, pr);
		}



	// Calculo la longitud del relleno inicial (de los dias no incluidos por el primer ciclo).
	int relleno = (ciclos.size() <= 0)? 0 : (int)((ciclos.get(0).getFechaHoraInicio().getTime() - Util.toMidnight(fecha1).getTime()) * pixelesXmilisegundos);
	%>
	<br/>
	<table class="resultados">
		<tr class="titulo"><td colspan="<%= ciclos.size()+3 %>" align="left"><%= newlongs.get(n).getDescriptor() %></td></tr>
		<tr>
			<td rowspan="3">
				<div style="width:100px">
				<%
				for(int f=0; f<formatos.size(); f++)
					{ %><span style="background-color: <%= colores[f] %>;">&nbsp;&nbsp;</span> <%= formatos.get(f).getFormato().getDescriptor() %><br/><% }
				%>
				</div>
			</td>

			<td rowspan="3">
				<div style="width:60px">
				<%
				for(int f=0; f<formatos.size(); f++)
					{
					String porcentaje = (porcentajeXformatos.get(formatos.get(f).getFormatoId()) != null)? Util.formatPorcentaje(porcentajeXformatos.get(formatos.get(f).getFormatoId())) : "0";
					%><%= porcentaje %> %<br/><%
					}
				%>
				</div>
			</td>

		<% if(relleno > 0) { %>
			<td rowspan="3"><div style="width: <%= relleno %>px"></div></td>
		<% } %>

		<% {
		for(int c=0; c<ciclos.size(); c++)
			{ %>
			<td valign="top" align="center">
				<div><%= Util.format(ciclos.get(c).getFechaHoraInicio(), "dd/MM") %> al <%= Util.format(ciclos.get(c).getFechaHoraFin(), "dd/MM") %></div>
			</td>
			<% }
		} %>
		</tr>

		<tr>
		<% {
		for(int c=0; c<ciclos.size(); c++)
			{ %>
			<td valign="bottom">
				<div style="width:<%= (ciclos_anchoColumna[c]+5) %>px">
					<%= ciclos_codigoHtml[c] %>
					<div style="clear:both"></div>
				</div>
			</td>
			<% }
		} %>
		</tr>

		<tr>
		<% {
		for(int c=0; c<ciclos.size(); c++)
			{ %>
			<td valign="top">
				<div style="width:<%= (ciclos_anchoColumna[c]+5) %>px">
					<%= ciclos_codigoHtmlProps[c] %>
					<div style="clear:both"></div>
				</div>
			</td>
			<% }
		} %>
		</tr>
	</table>
	<%
	}
} %>

<%@ include file="jspf/footer.jspf" %>

</body>
</html>
